//
//  WBUserAccountViewModel.swift
//  WBWeiBo
//
//  Created by 王斌 on 16/7/12.
//  Copyright © 2016年 王斌. All rights reserved.
//

import UIKit

//封装OAuth登录相关接口
class WBUserAccountViewModel: NSObject {
    
    // 单例访问点
    static let shareUserAccount:WBUserAccountViewModel = WBUserAccountViewModel()
    
    //  获取用户对象从沙盒路径里面解档对象
    var userAccount:WBUserAccount?{
        //解档用户对象
        return WBUserAccount.loadUserAccount()
    }
    
    //  构造哈函数私有化
    private override init() {
        super.init()
    }

    //  封装判断accessToken是否为nil,表示登录结果
    var isLogin:Bool{
        return accessToken != nil
    }
    
    
    /*
        如果accessToken为nil,不用判断,表示没有登录
        如果accessToken不为nil,判断accessToken是否过期,不过期返回一个正确的accessToken,过期返回nil
    */
    var accessToken :String?{
        // 判断accessToken是否为nil,为nil表示没有登录
        guard let token = userAccount?.access_token else{
            return nil
        }
        
        // token一定有值,过期时间大于我们当前时间表示没有过期
        let result = userAccount?.expiresDate?.compare(NSDate())
        
        // 使用降序表示我们进行从大到小
        if result == NSComparisonResult.OrderedDescending{
            return token
        }else{
            return nil
        }
    }
    
    
    
    
    //   通过授权码(code)获取accesstoken
    func requestAccesstoken(code:String,callBack:(isSuccess:Bool) ->()){
        
        WBNetworkTools.sharedTools.requestAccesstoken(code) { (response, error) -> () in
            if error != nil{
                print(error)
                callBack(isSuccess: false)
                
                return
            }
            
            // 代码执行到此,成功的回调
            guard let dic = response as? [String:AnyObject]else{
                
                print("不是正确的json格式")
                callBack(isSuccess: false)
                return
            }
            
            // 代码执行到此,dic一定有值,并且是符合我们需要的类型
            let userAccount = WBUserAccount(dic: dic)
            
            print(userAccount)
            
            //  通过accesstoken和uid获取用户信息
            self.requestUserInfo(userAccount, callBack: callBack)
        }
    }
    
    //  获取用户信息
    private func requestUserInfo(userAccount:WBUserAccount,callBack:(isSuccess:Bool)->()){
        
        WBNetworkTools.sharedTools.requestUserInfo(userAccount) { (response, error) -> () in
            
            if error != nil{
                print(error)
                callBack(isSuccess: false)
                return
            }
            
            guard let dic = response as? [String:AnyObject] else{
                print("不是一个正确json格式")
                callBack(isSuccess: false)
                return
  
            }
            
            //  代码执行到此字典一定有值
            
            let name = dic["name"]
            let avatar_large = dic["avatar_large"]
            
            //  设置用户名和头像
            userAccount.name = name as? String
            userAccount.avatar_large = avatar_large as? String
            
            //  保存用户对象
            let result = userAccount.saveUserAccount()
            
            if result{
                callBack(isSuccess: true)
            }else{
                callBack(isSuccess: false)
            }
            
            print(userAccount)
        }
        
    }
    
    
    
}














